#include "..\Modulos\GrafoListAdy\GrafoLA.h"
#include <stdlib.h>

using namespace std;

void DesplegarMenu(){
    printf("\n\nMENU:\n\n");
    printf("1 - Agregar una nueva arista\n");
    printf("2 - Determinar el grado de un vertice\n");
    printf("3 - Desplegar los vertices adyacentes a un vertice\n");
    printf("4 - Consultar si existe arista entre 2 vertices\n");
    printf("5 - Desplegar grafo\n");
    printf("6 - Determinar si el grafo es Simple\n");
    printf("7 - Determinar si el grafo es Completo\n");
    printf("8 - Determinar si el grafo es Regular\n");
    printf("9 - Salir");
    printf("\n\n");

}

void PressEnter(){
    char tecla;
    fflush(stdin);
    printf("\n\n\n                    Presione 'Enter' para continuar");
    scanf("%c", &tecla);
    fflush(stdin);
}

int main(){
int i,menu, vertice, vertice2,grado;
Grafo grafoN;
    creaGrafoN (grafoN);
    do{
        printf("     ************* BIENVENIDO AL PROGRAMA DE GRAFOS *************");

        printf("\n\nGrafo definido de N = %d vertices", N);

        DesplegarMenu();
        printf("\n\nIngrese opcion de menu: ");
        scanf("%d",&menu);
        printf("\n\n");
        fflush(stdin);
        switch (menu){
            case 1:
                do{
                    printf("Ingrese los dos vertices que conforman la arista a ingresar\n");
                    printf("\nPrimer Vertice: ");
                    scanf("%d", &vertice);
                    fflush(stdin);
                    printf("Segundo Vertice: ");
                    scanf("%d", &vertice2);
                    fflush(stdin);
                }while (!verticeValido(vertice)||!verticeValido(vertice2));  // no valida si se ingresa un valor negativo o igual o mayor a N
                if(!existeArista(grafoN,vertice,vertice2)){
                    agregaArista(grafoN, vertice, vertice2);
                    printf("\nSe ingreso una nueva arista");
                }else
                    printf("\nNo se ingreso arista, la misma ya existia");
                PressEnter();
                system("cls");
                break;
            case 2:
                do{
                    printf("Ingrese vertice a consultar grado: ");
                    scanf("%d", &vertice);
                    fflush(stdin);
                }while(!verticeValido(vertice));
                grado=gradoVertice(grafoN, vertice);
                printf("\nEl grado es: %d", grado);
                PressEnter();
                system("cls");
                break;
            case 3:
                do{
                    printf("Ingrese vertice a consultar adyacencias: ");
                    scanf("%d", &vertice);
                    fflush(stdin);
                }while(!verticeValido(vertice));
                printf("Los vertices adyacentes al vertice %d son: ", vertice);
                desplegaVerticesAdyacentes(grafoN,vertice);
                PressEnter();
                system("cls");
                break;
            case 4:
                do{
                    printf("Ingrese los dos vertices que conforman la arista a consultar");
                    printf("\nPrimer Vertice: ");
                    scanf("%d", &vertice);
                    fflush(stdin);
                    printf("Segundo Vertice: ");
                    scanf("%d", &vertice2);
                    fflush(stdin);
                }while(!verticeValido(vertice)||!verticeValido(vertice2));

                if (existeArista(grafoN, vertice, vertice2))
                    printf("\nExiste arista entre los vertices");
                else
                    printf("\nNo existe arista entre los vertices");
                PressEnter();
                system("cls");
                break;
            case 5:
                printf("Vertice | Aristas con\n");
                for(i=0;i<N;i++){
                printf("    %d   |   ", i);
                    desplegarLista(grafoN[i]);
                    printf("\n");
                }
                PressEnter();
                system("cls");
                break;
            case 6:
                if (esGrafoSimple(grafoN))
                    printf("\nEl grafo ES Simple");
                else
                    printf("\nEl grafo NO ES Simple");
                PressEnter();
                system("cls");
                break;
            case 7:
                if (esGrafoCompleto(grafoN))
                    printf("\nEl grafo ES Completo");
                else
                    printf("\nEl grafo NO ES Completo");
                PressEnter();
                system("cls");
                break;
            case 8:
                if (esGrafoRegular(grafoN))
                    printf("\nEl grafo ES Regular");
                else
                    printf("\nEl grafo NO ES Regular");
                PressEnter();
                system("cls");
                break;
        }

    }while(menu!=9);
    eliminarGrafo(grafoN);
}
